#include "GlobalHeader.h"

int main()
{
    //创建一个管道  1是写 0是读

    
    int fd[2];
    if(pipe(fd) < 0)
    {
        perror("pipe");
        return -1;
    }
    int fd2[2];
    if(pipe(fd2) < 0)
    {
        perror("pipe");
        return -1;
    }

    pid_t pid = fork();
    if(pid < 0)
    {
        perror("fork");
        return -1;
    }
    //子进程
    if(pid == 0)
    {
        while(1)
        {
            char msg[32] = {0};
            printf("子:子进程要输入的数据:");
            scanf("%s",msg);
            while(getchar() != '\n');
            write(fd[1],msg,sizeof(msg));

            //清空
            memset(msg,0,32);
            read(fd2[0],msg,32);
            printf("子:从父进程读到的数据:%s\n\n",msg);
        }
        
    }
    //父进程
    else
    {
        while(1)
        {
            //0代表默认阻塞
            fcntl(fd[0],F_SETFL,O_NONBLOCK);
            char msg[32] = {0};
            //read函数是阻塞函数,只要没读到东西就会一直阻塞
            read(fd[0],msg,32);
            printf("父:从子进程读到的数据:%s\n\n",msg);

            memset(msg,0,32);
            printf("父:父进程要输入的数据:");
            scanf("%s",msg);
            while(getchar() != '\n');
            write(fd2[1],msg,sizeof(msg));
        }
    }
    return 0;
}